# -*- coding: UTF-8 -*-
'''
@Project ：automation_-interface_testing 
@File    ：tools.py
@IDE     ：PyCharm 
@Author  ：思亦忆
@Date    ：2025/9/5 星期五 21:58:31

'''
import inspect
# 处理文件路径，拼接文件路径获取项目路径
# 导入os包
import os


def get_project_path():
    """
    获取调用此函数的脚本所在的目录路径。

    Returns:
        str: 调用者脚本的绝对目录路径。
    """
    # 获取调用栈帧信息
    caller_frame = inspect.stack()[1]
    # 从帧信息中获取调用者的文件名（绝对路径）
    caller_file_path = os.path.abspath(caller_frame.filename)

    # 获取调用者文件所在的目录路径
    caller_dir_path = os.path.dirname(caller_file_path)
    return caller_dir_path


def get_filename_without_extension():
    """
    获取调用此函数的脚本的文件名，不包含.py后缀。

    该函数利用inspect模块获取调用栈信息，确定调用者文件路径，
    然后提取文件名并去除扩展名。

    Returns:
        str: 调用者脚本的文件名（不含.py后缀），例如：'test_module'

    Raises:
        IndexError: 如果调用栈信息获取失败（理论上不应发生在正常调用情况下）
    """
    try:
        # 获取调用栈信息。inspect.stack()[0]是当前帧（即本函数自身），
        # [1]是直接调用者的帧，这也是我们需要的。
        caller_frame = inspect.stack()[1]
        # 从帧信息中获取调用者文件的绝对路径
        caller_file_path = os.path.abspath(caller_frame.filename)
        # 使用os.path.basename从路径中提取文件名（包含扩展名）
        caller_filename_with_extension = os.path.basename(caller_file_path)

        # 使用rsplit('.', 1)从右侧只分割一次，处理可能存在多个点的情况
        # 例如："my.module.file.py" -> ['my.module.file', 'py']，我们取第一部分
        caller_filename_without_extension = caller_filename_with_extension.rsplit('.', 1)[0]

        return caller_filename_without_extension
    except IndexError:
        # 理论上，只要该函数被正常调用，stack()[1]应该存在。
        # 此异常处理是为了代码的健壮性。
        return "unknown_script"  # 或者可以考虑抛出异常

def sep(path, add_sep_before=False, add_sep_after=False):
    """
    拼接文件路径，添加系统分隔符
    :param path: 路径列表，类型为数组  ["config","environment.yaml"]
    :param add_sep_before: 是否需要在拼接的路径前加一个分隔符
    :param add_sep_after: 是否需要再拼接的路径后加一个分隔符
    :return:
    """
    # 拼接传入的数组
    all_path = os.sep.join(path)
    # 如果before为TRUE，那就在路径前面加“/”
    if add_sep_before:
        all_path = os.sep + all_path
    # 如果after为TRUE，那就在路径后面加“/”
    if add_sep_after:
        all_path = all_path + os.sep
    return all_path
def get_config_path():
    """
    :return:
    """
    all_path = os.sep.join(get_project_path())
    return all_path


if __name__ == '__main__':
    project_path = get_project_path()
    print("调用者所在目录：", project_path)
